// 下面代码是一个环境检测器，它使用闭包来封装内部逻辑，并返回一个对象，该对象包含三个方法：getEnvironment、isBrowser 和 isNode。
const EnvironmentChecker = (function () {
    // 这边是定义内部函数，用于检测当前环境
    function detectEnvironment() {
        if (typeof window !== 'undefined' && typeof document !== 'undefined') {
            return 'browser';
        } else if (typeof process !== 'undefined' && process.versions && process.versions.node) {
            return 'node';
        } else {
            return 'unknown';
        }
    }

    // 返回一个对象，包含 getEnvironment、isBrowser 和 isNode 方法(这边其实调用的是内部的函数)
    return {
        getEnvironment: function () {
            return detectEnvironment();
        },
        isBrowser: function () {
            return detectEnvironment() === 'browser';
        },
        isNode: function () {
            return detectEnvironment() === 'node';
        }
    };
})();

// detectEnvironment方法对外部是隐藏的吗
// 使用示例
console.log(EnvironmentChecker.getEnvironment()); // 输出当前环境
console.log(EnvironmentChecker.isBrowser());      // 是否是浏览器环境
console.log(EnvironmentChecker.isNode());         // 是否是 Node.js 环境